'use strict';
const JWT = require('jsonwebtoken');
const bcrypt = require('bcryptjs')

module.exports = app => {
    class Controller extends app.Controller {
        // 获取验证码
        async captcha() {
            const {
                ctx,
                service
            } = this;
            let captcha = await service.admin.system.common.captcha();
            ctx.response.type = 'image/svg+xml';
            ctx.body = captcha.data
        }
        // 登录
        async login() {
            const { ctx, service } = this;
            ctx.state.user = null; // 在状态里设置一个user，用来存储登录用户的信息，先清空
            const query = ctx.request.body; //  获取前台传过来的登录信息
            const validateReturn = await ctx.validate('user.login', query); // 验证登录信息是否正确
            if (!validateReturn) return // 验证不通过，阻止后面的代码执行
            // 验证码区分大小写，加上。toLowerCase() 就是不区分大小写
            if (ctx.session.code.toLowerCase() !== query.captcha.toLowerCase()) {
                return ctx.throw(500, '验证码错误');
            }
            const result = await service.admin.system.common.login(query)
            if (!result) {
                return ctx.throw(500, '用户不存在');
            } else {
                let checkPwd = await bcrypt.compare(query.password, result.get('password'));
                // 校验密码compare（要比较的数据，加密码的数据）
                if (!checkPwd) {
                    return ctx.throw(500, '用户名或密码错误')
                } else if (result.status === '0' ) {
                    return ctx.throw(500, '该用户已经被停用！');
                } else {
                    const token = JWT.sign({
                            id: result.id,
                            userName: result.userName
                        },
                        this.config.jwt.secret, {
                            expiresIn: this.config.jwt.expiresIn,
                        })
                    ctx.state.user = result;
                    ctx.returnBody({
                        userInfo: result,
                        token
                    });
                }
            }
        }
        // 登出
        


    }
    return Controller;
};